function res = write(rpc_model, rpc_path)
%hsRPC.write 将RPC结构体保存为标准RPC文件
%
% Syntax:
%   res = hsRPC.write(rpc_model, rpc_path);
% 
% Params:
%   - rpc_model  [required] [struct] RPC模型结构体, 通过 hsRPC.read 或 hsRPC.fitting 获取
%   - rpc_path   [required] [[char], [string]]  RPC文件保存路径
%
% Return:
%   - res 是否保存成功
%
% Author: 
%   iam002, 2025年2月28日
%
% Update: 
%   iam002, 2025年2月28日
%
% Matlab Version: R2023a

    res = writeStandardFile(rpc_model, rpc_path);
    
end

%%
function res = writeStandardFile(rpc_model, rpc_path)
    fid = fopen(rpc_path, "w");
    if fid == -1
        error("cannot write to %s\n", rpc_path);
    end

    fprintf(fid, 'satId = \"%s\";\n', rpc_model.satId);
    fprintf(fid, 'bandId = \"%s\";\n', rpc_model.bandId);
    fprintf(fid, 'SpecId = \"%s\";\n', rpc_model.SpecId);
    fprintf(fid, 'BEGIN_GROUP = IMAGE\n');
    fprintf(fid, '\terrBias = %.1f;\n', rpc_model.errBias);
    fprintf(fid, '\terrRand = %.1f;\n', rpc_model.errRand);
    fprintf(fid, '\tlineOffset = %.8f;\n', rpc_model.lineOffset);
    fprintf(fid, '\tsampOffset = %.8f;\n', rpc_model.sampOffset);
    fprintf(fid, '\tlatOffset = %.8f;\n', rpc_model.latOffset);
    fprintf(fid, '\tlongOffset = %.8f;\n', rpc_model.longOffset);
    fprintf(fid, '\theightOffset = %.8f;\n', rpc_model.heightOffset);
    fprintf(fid, '\tlineScale = %.8f;\n', rpc_model.lineScale);
    fprintf(fid, '\tsampScale = %.8f;\n', rpc_model.sampScale);
    fprintf(fid, '\tlatScale = %.8f;\n', rpc_model.latScale);
    fprintf(fid, '\tlongScale = %.8f;\n', rpc_model.longScale);
    fprintf(fid, '\theightScale = %.8f;\n', rpc_model.heightScale);
    
    fprintf(fid, '\tlineNumCoef = (\n');
    for i = 1:19
        fprintf(fid, '\t%.11e,\n', rpc_model.lineNumCoef(i));
    end
    fprintf(fid, '\t%.11e);\n', rpc_model.lineNumCoef(20));
    
    fprintf(fid, '\tlineDenCoef = (\n');
    for i = 1:19
        fprintf(fid, '\t%.11e,\n', rpc_model.lineDenCoef(i));
    end
    fprintf(fid, '\t%.11e);\n', rpc_model.lineDenCoef(20));
    
    fprintf(fid, '\tsampNumCoef = (\n');
    for i = 1:19
        fprintf(fid, '\t%.11e,\n', rpc_model.sampNumCoef(i));
    end
    fprintf(fid, '\t%.11e);\n', rpc_model.sampNumCoef(20));

    fprintf(fid, '\tsampDenCoef = (\n');
    for i = 1:19
        fprintf(fid, '\t%.11e,\n', rpc_model.sampDenCoef(i));
    end
    fprintf(fid, '\t%.11e);\n', rpc_model.sampDenCoef(20));
    
    fprintf(fid, 'END_GROUP = IMAGE\n');
    fprintf(fid, 'END;\n');
    fclose(fid);

    res = true;
end
    